home *** CD-ROM | disk | FTP | other *** search
- /*
- File: CIconButtons.c
-
- Description:
- This file contains routines used to implement the color icon buttons
- displayed in the top of HTMLSample's windows.
-
- HTMLSample is an application illustrating how to use the new
- HTMLRenderingLib services found in Mac OS 9. HTMLRenderingLib
- is Apple's light-weight HTML rendering engine capable of
- displaying HTML files.
-
-
- Copyright:
- © Copyright 1999 Apple Computer, Inc. All rights reserved.
-
- Disclaimer:
- IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under Apple’s
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- Change History (most recent first):
- Wed, Dec 22, 1999 -- created
- */
-
-
- #include "CIconButtons.h"
- #include <QuickDraw.h>
- #include <Icons.h>
- #include <Events.h>
- #include <Resources.h>
- #include <string.h>
-
-
-
- /* NewCIconButton retrieves a new color icon button
- resource from the resource file. the id number
- corresponds to the resource id of the CICB resource. */
- CIconButtonHandle NewCIconButton(short id) {
- Handle theRsrc;
- theRsrc = GetResource(kIconButtonType, id);
- /* here, we call detach resource because we
- may have many windows open with many buttons
- each having a different state. */
- if (theRsrc != NULL) DetachResource(theRsrc);
- return (CIconButtonHandle) theRsrc;
- }
-
-
- /* DisposeCIconButton disposes of any structures allocated
- for the color icon button allocated by NewCIconButton. */
- void DisposeCIconButton(CIconButtonHandle cicb) {
- DisposeHandle((Handle) cicb);
- }
-
-
-
- /* GetCIconButtonStringData returns a new handled containing
- the string data copied from the color icon resource. The
- handle will contain a C-style string terminated with a zero
- byte. It is the caller's responsibility to dispose of this
- handle after it has been used. */
- OSErr GetCIconButtonStringData(CIconButtonHandle cicb, Handle *strdata) {
- char handstate;
- OSErr err;
- handstate = HGetState((Handle) cicb);
- HLock((Handle) cicb);
- err = PtrToHand((**cicb).stringdata, strdata, strlen((**cicb).stringdata) + 1);
- HSetState((Handle) cicb, handstate);
- return err;
- }
-
-
- /* SetCIconButtonPosition sets the color icon button's
- screen postion. h and v are coordinates in the
- current grafport. */
- void SetCIconButtonPosition(CIconButtonHandle cicb, short h, short v) {
- char handstate;
- handstate = HGetState((Handle) cicb);
- HLock((Handle) cicb);
- OffsetRect(&(**cicb).bounds, h - (**cicb).bounds.left, v - (**cicb).bounds.top);
- HSetState((Handle) cicb, handstate);
- }
-
-
- /* DrawCIconButton draws the icon button using the
- as it should appear given the state specified. state
- should be either kCBdisabled, kCBup, or kCBdown.
- The last state a button is drawn in affects the
- result of TrackCIconButton. */
- void DrawCIconButton(CIconButtonHandle cicb, short state) {
- CIconHandle theIcon;
- char handstate;
- handstate = HGetState((Handle) cicb);
- HLock((Handle) cicb);
- theIcon = GetCIcon((**cicb).cicnIDs[state]);
- if (theIcon != NULL) {
- PlotCIcon(&(**cicb).bounds, theIcon);
- DisposeCIcon(theIcon);
- }
- (**cicb).drawnstate = state;
- HSetState((Handle) cicb, handstate);
- }
-
-
- /* TrackCIconButton should be called whenever a click is made
- inside of a color icon button. if the last time the button
- was drawn its state was not kCBup or the click is outside
- of the button, then this routine returns false. */
- Boolean TrackCIconButton(CIconButtonHandle cicb, Point where) {
- Boolean result;
- char handstate;
- handstate = HGetState((Handle) cicb);
- HLock((Handle) cicb);
- if ((**cicb).drawnstate == kCBdisabled) {
- result = false;
- } else if (PtInRect(where, &(**cicb).bounds)) {
- Boolean isin, ishilited;
- Point mouseLoc;
- isin = true;
- ishilited = true;
- mouseLoc = where;
- DrawCIconButton(cicb, kCBdown);
- while (StillDown()) {
- GetMouse(&mouseLoc);
- isin = PtInRect(mouseLoc, &(**cicb).bounds);
- if (isin != ishilited) {
- ishilited = isin;
- DrawCIconButton(cicb, ishilited ? kCBdown : kCBup);
- }
- }
- result = ishilited;
- } else result = false;
- HSetState((Handle) cicb, handstate);
- return result;
- }
-